﻿namespace BlogsAPI.Sites
{
    using System;
    using System.Text.RegularExpressions;
    using Abstract;
    using System.Diagnostics;
    using System.IO;
    using System.Net;

    /// <summary>
    /// Рускоязычная копия твиттера специализирующаяся на копировании постов из большого твиттера
    /// </summary>
    [BlogServiceAPI(Description = "http://rutvit.ru", IsMicroblog = true)]
    public class Rutvit : BlogServer
    {
        private static readonly Regex Validation = new Regex(@"^http://(?:\w+\.)?rutvit\.ru", Regexoptions);
        private static readonly Regex ValidationFull = new Regex(@"^http://(?:\w+\.)?rutvit\.ru/(.*?)(?:/|$)", Regexoptions);
        private static readonly Regex rGetIt = new Regex(@"<a[^>]+?class\W+avatar[^>]*>\s*<img[^>]+src\W+([^""']+)\W", Regexoptions);

        #region interface: BlogServer

        /// <summary>
        /// Конструктор!
        /// </summary>
        [DebuggerStepThrough]
        public Rutvit()
        {
        }

        /// <summary>
        /// проверка, является ли передаваемый урл чатью этого сервиса
        /// </summary>
        /// <example>http://rutvit.ru/kirkenpuzel/tvit/1276869511</example>
        public override Boolean ValidateLink(String sLink)
        {
            return Validation.Match(sLink).Success;
        }


        /// <summary>
        /// Получение ссылки на блог блогера
        /// </summary>
        /// <param name="userName">ник блогера</param>
        public override String GetBlogLink(string userName)
        {
            return String.Format("http://rutvit.ru/{0}", userName);
        }

        /// <summary>
        /// проверка, является ли передаваемый урл чатью этого сервиса
        /// </summary>
        /// <param name="sLink">ссылка для проверки</param>
        /// <param name="userName">Имя пользователя на блогохостинге</param>
        /// <param name="bType">Тип блога - сообщество или блог</param>
        public override Boolean ValidateLink(String sLink, out String userName, out BlogType bType)
        {
            bType = BlogType.Unknown;
            userName = String.Empty;
            Match m = ValidationFull.Match(sLink);
            if (m.Success)
            {
                bType = BlogType.User;
                userName = m.Groups[1].ToString();
            }
            return m.Success;
        }

        /// <summary>
        /// Получение ссылки на блог блогера
        /// </summary>
        /// <param name="userName">ник блогера</param>
        /// <param name="btype">Тип блога - сообщество или блог</param>
        public override String GetBlogLink(string userName, BlogType btype)
        {
            return GetBlogLink(userName);
        }

        /// <summary>
        /// Извлечение html кода Img аватарки для блога.
        /// </summary>
        /// <param name="userName">ник блогера</param>
        /// <param name="btype">Тип блога - сообщество или блог</param>
        /// <returns></returns>
        public override string ExtractAvatar(string userName, BlogType btype)
        {
            String sRet = String.Empty;
            try
            {
                HttpWebRequest myHttpWebRequest = MakeRequest(GetBlogLink(userName, btype));
                myHttpWebRequest.Method = "GET"; // метод GET
                myHttpWebRequest.Referer = "http://rutvit.ru";
                //получаем ответ и его разбираем...
                HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
                string result = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding).ReadToEnd();
                myHttpWebResponse.Close();
                //ПОЛУЧИЛИ xml - откроемка его...
                Match oRet = rGetIt.Match(result);
                if (oRet.Success)
                {
                    oRet = rGetIt.Match(oRet.Groups[0].Value);
                    if (oRet.Success)
                    {
                        sRet = oRet.Groups[1].Value;
                    }
                }
            }
            catch (Exception e1)
            {
                Debug.WriteLine("Ошибка загрузки аватарки блога: " + e1.Message);
            }
            return sRet;
        }

        /// <summary>
        /// Получение ссылки на RSS блогера - берем старым способом..
        /// </summary>
        /// <param name="UserName">ник блогера</param>
        /// <remarks>http://api.rutvit.ru/statuses/user_timeline/kirkenpuzel.rss</remarks>
        public override String GetRssLink(string UserName, BlogType btype)
        {
            return String.Format("http://api.rutvit.ru/statuses/user_timeline/{0}.rss", UserName);
        }

        #endregion
    }
}